package com.cx.mall.user.controller;

import com.cx.mall.common.util.JwtUtils;
import com.cx.mall.common.util.ResponseVO;
import com.cx.mall.user.entity.UserInfo;
import com.cx.mall.user.service.ILoginService;
import com.cx.mall.user.vo.LoginVO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;

@RestController
public class LoginController {
    /**
     * 控制层，业务层，数据访问层通过什么连接到一起的
     * 1. 创建service接口
     * 2. 创建service实现类
     * 3. 在service实现类中注入数据访问对象
     * 4. 在controller中注入service接口
     * 5. 在controller中调用service接口方法
     * 总而言之，就是通过service接口调用service实现类中的方法，service实现类中调用数据访问对象中的方法
     * 控制反转，控制反转，就是把创建对象的过程交给spring容器，spring容器负责创建对象，控制反转，把创建对象的过程交给spring容器，spring容器负责创建对象
     */
    @Autowired
    private ILoginService loginService;
    @PostMapping("/login")
    public ResponseVO login(@RequestBody LoginVO loginVO, HttpServletResponse response) throws Exception {
        // 调用service
        UserInfo userInfo = loginService.login(loginVO.getUsername(), loginVO.getPassword());
        Map<String,Object> map = new HashMap<>();
        map.put("userId",userInfo.getId());
        String token = JwtUtils.generateToken(map);
        response.setHeader("Authorization",token);
        // 响应结果
        return ResponseVO.success(userInfo);
    }
}
